home *** CD-ROM | disk | FTP | other *** search
- Date: Mon, 13 May 85 22:02:14 BST
- From: decvax!mcvax!jimc@ukc.ac.uk
- Subject: UK-1.1 Sendmail Configuration Package. Part 3 of 3
-
-
- # This is a shell archive.
- # Remove everything above and including the cut line.
- # Then run the rest of the file through sh.
- -----cut here-----cut here-----cut here-----cut here-----
- #!/bin/sh
- # shar: Shell Archiver
- # Run the following text with /bin/sh to create:
- # chn
- # This archive created: Fri May 10 14:42:50 1985
- echo shar: creating directory chn
- mkdir chn
- chdir chn
- echo shar: extracting MAKE '(6663 characters)'
- cat << \SHAR_EOF > MAKE
- #!/bin/sh
- #
- # shell script to generate a sendmail <host>.chn file containing all
- # the routing information for this host from a set of per-mailer channel
- # files containing in this directory.
- #
-
- if [ $# -le 1 ]
- then echo usage: make host files...
- exit
- fi
-
- host=$1
- shift
- rm -f $host.chn
-
- echo -n > chn.classes
- echo -n > S9
-
- #
- # sort out which files refer to which mailers
- #
- rm -f $$.ether $$.luucp $$.uucp $$.janet $$.bitnet $$.top
-
- for i in $*
- do
- case $i in
- *ether.chn) cat $i >> $$.ether
- ;;
- *luucp.chn) cat $i >> $$.luucp
- ;;
- *uucp.chn) cat $i >> $$.uucp
- ;;
- *janet.chn) cat $i >> $$.janet
- ;;
- *bitnet.chn) cat $i >> $$.bitnet
- ;;
- *top.chn) cat $i >> $$.top
- ;;
- esac
- done
-
- #
- # Standard format channel tables
- #
- for chnf in $$.ether $$.luucp
- do
- if [ -f $chnf ]
- then
- awk '
- BEGIN {
- mailer=substr(FILENAME, index(FILENAME,".")+1)
- MINCLSIZE = 3
- if (mailer == "ether")
- { print "# Ethernet" >>"S9"
- classes = "PQR"
- }
- else if (mailer == "luucp")
- { print "# Local UUCP" >>"S9"
- classes = "LMN"
- }
- c = 1
- }
-
- /^#/ { break }
-
- /^\*/ {
- $1 = substr($1, 2)
- $2 = sprintf($2, "$2")
- printf "R$+@$+%s\t\t$@<$1>%s.%s\n", $1, $2, mailer >>"S9"
- break
- }
-
- {
- i = index($1, ".")
- subdom = substr($1,1,i-1)
- restdom = substr($1,i+1)
-
- if (subdom == $2)
- direct[restdom] = direct[restdom] " " subdom
- else
- printf "R$+@%s\t\t$@<$1@%s>%s.%s\n", $1, $1, $2, mailer >>"S9"
- }
-
- END {
- for (i in direct)
- { n = split(direct[i], sub, " ")
- if (n >= MINCLSIZE && c <= length(classes))
- { C = substr(classes, c, 1)
- c++
- printf "C%s%s\n", C , direct[i] >>"chn.classes"
- printf "R$+@$=%s.%s\t\t$@<$1>$2.%s\n",C,i,mailer >>"S9"
- }
- else
- { for (j=1; j<=n; j++)
- printf "R$+@%s.%s\t\t$@<$1>%s.%s\n", \
- sub[j], i, sub[j], mailer >>"S9"
- }
- }
- print "" >>"chn.classes"
- print "" >>"S9"
- }
- ' $chnf
-
- fi
- done
-
- #
- # The Bitnet channel (bitnet links)
- #
- if [ -f $$.bitnet ]
- then
- awk '
- BEGIN {
- print "# Bitnet sites"
- print "R$+@$+.bitnet $@<$1>$2.bitnet"
- }
-
- /^#/ { break }
-
- { printf "R$+@%s\t\t$:<$1>%s.bitnet\n", $1, $2 }
-
- END {
- print ""
- }
- ' $$.bitnet >>S9
-
- fi
-
- #
- # The UUCP channel
- #
- if [ -f $$.uucp ]
- then
- sed -e '/^#/d' -e '/^$/d' $$.uucp | (sort +1; echo 'x.y z!x!%s') |
- awk '
- BEGIN {
- MINCLSIZE = 3
- classes = "UVWXYZ"
- c = 1
- m = 0
- print "# UUCP sites" >>"S9"
- print "# convert to uucp addresses and try to find a match" >>"S9"
- print "R$+@$+ $:$>13$1@$2" >>"S9"
- print "" >>"S9"
- }
-
- {
- i = index($1, ".")
- subdom = substr($1,1,i-1)
- restdom = substr($1,i+1)
-
- p = index($2, subdom)
- ps = subdom "!%s"
-
- if (p == 1 && $2 == ps)
- direct[restdom] = direct[restdom] " " subdom
- else if (p > 1 && substr($2, p) == ps)
- { path = substr($2, 1, p-1)
- if (path != lastpath || restdom != lastrest)
- { if (m >= MINCLSIZE && c <= length(classes))
- { j = index(lastpath, "!")
- host = substr(lastpath,1,j-1)
- addr = substr(lastpath,j+1)
-
- rclass = ""
- for (j=1; j<=m; j++)
- rclass = rclass " " sub[j]
-
- C = substr(classes, c, 1)
- c++
- printf "C%s%s\n", C, rclass >>"chn.classes"
- printf "R$=%s.%s!$+\t\t$@<%s$1!$2>%s.uucp\n", \
- C, lastrest, addr, host >>"S9.2"
- }
- else
- { for (i=1; i<=m; i++)
- { j = index(lastpath, "!")
- host = substr(lastpath,1,j-1)
- addr = substr(lastpath,j+1) sub[i]
- printf "R%s.%s!$+\t\t$@<%s!$1>%s.uucp\n",\
- sub[i], lastrest, addr, host >>"S9.2"
- }
- }
- lastpath = path
- lastrest = restdom
- m = 0
- }
- sub[++m] = subdom
- }
- else
- { i = index($2, "!")
- host = substr($2,1,i-1)
- addr = substr($2,i+1)
- addr = sprintf(addr,"$1")
- printf "R%s!$+\t\t$@<%s>%s.uucp\n", $1, addr, host >>"S9.2"
- }
- }
-
- END {
- for (i in direct)
- { n = split(direct[i],sub," ")
- if (n >= MINCLSIZE && c <= length(classes))
- { C = substr(classes, c, 1)
- c++
- printf "C%s%s\n", C , direct[i] >>"chn.classes"
- printf "R$=%s.%s!$+\t\t$@<$2>$1.uucp\n", C, i >>"S9"
- }
- else
- { for (j=1; j<=n; j++)
- printf "R%s.%s!$+\t\t$@<$1>%s.uucp\n", \
- sub[j], i, sub[j] >>"S9"
- }
- }
- print "" >>"chn.classes"
- print "" >>"S9.2"
- print "# no match in uucp - change back to domain style" >>"S9.2"
- print "R$+!$+ $:$>12$1!$2" >>"S9.2"
- print "" >>"S9.2"
- }
- '
- cat S9.2 >> S9
- rm -f S9.2
- fi
-
- #
- # The Janet channel
- #
- if [ -f $$.janet ]
- then
- awk '
- BEGIN {
- print "# Janet sites" >>"S9"
- print "# convert domain order to NRS style" >>"S9"
- print "R$+@$+ $:$>14$1@$2" >>"S9"
- print "" >>"S9"
- }
-
- /^#/ { break }
-
- {
- if ( $1 == "uk.ac." $2 ) # general rule will catch this
- break
-
- if ( $1 == "uk.co." $2 ) # general rule will catch this
- break
-
- printf "R$+@%s\t\t$@<$1>%s.janet\n", $1, $2 >>"S9"
- }
-
- END {
- print "" >>"chn.classes"
- print "" >>"S9"
- print "# pass all other uk addresses to hhmail to route" >>"S9"
- print "R$+@uk.ac.$+\t\t$@<$1>$2.janet" >>"S9"
- print "R$+@uk.co.$+\t\t$@<$1>$2.janet" >>"S9"
- print "" >>"S9"
- print "# convert domain order back to 822 style" >>"S9"
- print "R$+@$+ $:$>14$1@$2" >>"S9"
- print "" >>"S9"
- }
- ' $$.janet
-
- fi
-
- #
- # The Bitnet channel (arpa and uucp relaying)
- #
- if [ -f $$.bitnet ]
- then
- cat >>S9 <<'EOF'
- # arpa and uucp relays via Bitnet
- R$+@$+.arpa $@<$1@$2.arpa>smtpuser@wiscvm.barpa
- R$+@$+.uucp $@<$1@$2.uucp>uucp@psuvax1.buucp
-
- EOF
- fi
-
- #
- # Top Level Domain relaying
- #
- awk '
- BEGIN {
- print "#"
- print "# top level domain - relaying sites"
- print "#"
- print "# This is a list of default relaying sites for"
- print "# addresses that dont match anything above."
- print "#"
- print ""
- }
-
- /^#/ { break }
-
- {
- if (length($1) < 4)
- tabs = "\t\t\t"
- else
- tabs = "\t\t"
- printf "R$+.%s%s$:$1.%s@%s\n", $1, tabs, $1, $2
- }
- ' $$.top >> S9
-
- #
- # The header
- #
- cat > $host.chn <<EOF
- ###############################################################################
- ###############################################################################
- #####
- ##### @(#)$host.chn UK-1.1 sendmail configuration 22/4/85
- #####
- ##### The mailer selection and routing
- #####
- ###############################################################################
- ###############################################################################
-
- # classes
- EOF
-
- #
- # the classes
- #
- while read class group
- do
- echo "$group" | fmt | sed "s/^/$class/"
- done < chn.classes >> $host.chn
-
- #
- # the rules
- #
- cat - S9 >> $host.chn <<'EOF'
-
- ############################
- # Ruleset 9 -- routing #
- ############################
-
- #
- # This rule takes a full domain address and returns a
- # "address@host.network" triple.
- #
-
- S9
- EOF
-
- cat >> $host.chn <<'EOF'
-
- R$+@$+@$+ $1%$2@$3 address cleanup
- R$+ $@$>9$1 retry
-
- EOF
-
- rm -f chn.classes S9 $$.*
-
- echo $host.chn made
- exit
- SHAR_EOF
- if test 6663 -ne "`wc -c MAKE`"
- then
- echo shar: error transmitting MAKE '(should have been 6663 characters)'
- fi
- echo shar: extracting README '(2671 characters)'
- cat << \SHAR_EOF > README
- General
- -------
- This directory contains per-mailer channel (routing) tables from which
- the <host>.chn file can be generated.
-
- In general, these files have a list of domain names on the LHS and
- the "host to send to" on the RHS, e.g:
-
- usc.ac.uk vax1
-
- which specifies that addresses of the form "user@usc.ac.uk" should
- be send to the host "vax1"
-
- However, the actual format of the channel tables depends on the mailer,
- (see below) and is determined by the file name.
-
- For example, any file whose name ends with "janet.chn" is assumed to be
- a janet mailer channel table.
-
-
- Channel Table Formats
- ---------------------
- ether.chn and luucp.chn:
- These have the format described above; a domain name on the LHS
- and a hostname to send/relay to on the RHS.
-
- uucp.chn:
- This has a slightly different RHS syntax which the same as that
- produced by pathalias(1), e.g.:
-
- usc.ac.uk vax2!vax1!%s
-
- where %s is the user part of the address (converted to uucp form).
-
- janet.chn:
- The LHS domain name is in big-endian form in this table.
- The RHS is a "hostname" to send to.
- If a janet channel table is specified, then by default
- all uk.ac.<name> domains are assumed to be routed to <name>.
-
- bitnet.chn:
- This has the same format as the ether and luucp channel tables.
- If a bitnet channel table is specified, then by default all
- <name>.bitnet domains are routed to <name> (actual routing is done
- by the bitnet mailer).
-
- top.chn:
- This has a domain name on the RHS, for example.:
-
- ac.uk ukc.ac.uk
-
- which states that any address that ends in "ac.uk", which did not
- match a domain name in one of the mailer channel tables, is sent to
- ukc.ac.uk.
-
-
- Examples
- --------
- The archive Examples.a contains sample mailer channel files.
-
-
- How to make the <host>.chn file
- -------------------------------
- 1. Create a mailer channel file for each mailer you have.
- This is best done by extracting sample channel files from Examples.a
- and editing them to contain the relevent data for this host.
-
- 2. Run "MAKE host file1 file2... " to create the <host>.chn file.
- e.g. MAKE hwcs luucp.chn ukuucp.chn
-
- This shell script does a lot of work so be prepared to wait!
-
-
- Supported Mailers
- -----------------
- MAKE looks for tables for the following mailers:
-
- ether.chn (ethernet)
- luucp.chn (local uucp)
- uucp.chn (uucp)
- janet.chn (janet)
- bitnet.chn (bitnet)
- top.chn (top level relaying)
-
- If you have other mailers not listed here, then you will need to add
- some code the the MAKE shell script. Good Luck!
-
-
- Note
- ----
- Make sure that the domains on the RHS of the relaying rules (in top.chn)
- eventually match some domain on the LHS of a rule in one of the mailer
- channel tables.
- SHAR_EOF
- if test 2671 -ne "`wc -c README`"
- then
- echo shar: error transmitting README '(should have been 2671 characters)'
- fi
- echo shar: extracting Examples.a '(8558 characters)'
- cat << \SHAR_EOF > Examples.a
- !<arch>
- ether.chn 483094477 217 10 100644 170 `
- #
- # Ethernet channel table
- # The domain name on the LHS is routed to the host on the RHS.
- #
- bina.wisdom.bitnet bina
- haskel.wisdom.bitnet haskel
- deya.wisdom.bitnet deya
- luucp.chn 483094477 217 10 100644 170 `
- #
- # Local UUCP channel table
- # The domain name on the LHS is routed to the host on the RHS.
- #
- ra.hwcs.uucp ra
- jove.hwcs.uucp ra
- odin.hwcs.uucp ra
- zeus.hwcs.uucp ra
- uucp.chn 483094477 217 10 100644 1043 `
- # UUCP Channel Table
- # The domain name on the LHS is mapped to a path on the RHS.
- # If "%s" is included in the RHS then the user part goes here
- # e.g. jim@hwcs.ac.uk -> hwcs!%s -> hwcs!jim
- #
- cstvax.ed.ac.uk cstvax!%s
- cs.ucl.ac.uk cstvax!ucl-cs!%s
- glasgow.uucp cstvax!glasgow!%s
- paisley.uucp cstvax!glasgow!paisley!%s
- csbstand.uucp cstvax!glasgow!csbstand!%s
- glpsycho.uucp cstvax!glasgow!glpsycho!%s
- glhocus.uucp cstvax!glasgow!glhocus!%s
- dice.uucp dice!%s
- edcaad.uucp edcaad!%s
- gilles.uucp edcaad!gilles!%s
- kcl-cs.uucp kcl-cs!%s
- west44.uucp kcl-cs!%s
- ukc.ac.uk kcl-cs!ukc!%s
- westf.uucp kcl-cs!westf!%s
- mpgraph.uucp kcl-cs!mpgraph!%s
- camjenny.uucp kcl-cs!camjenny!%s
- root44.uucp kcl-cs!root44!%s
- rootis.uucp kcl-cs!root44!rootis!%s
- rootcl.uucp kcl-cs!root44!rootcl!%s
- hirst1.uucp kcl-cs!hirst1!%s
- camsteve.uucp kcl-cs!camjenny!camsteve!%s
- cuedvax.uucp kcl-cs!camjenny!camsteve!cuedvax!%s
- qmc-cs.uucp kcl-cs!root44!qmc-cs!%s
- spider.uucp spider!%s
- ulcs.uucp ulcs!%s
- # everything else goes to ukc for further routing
-
- janet.chn 483094477 217 10 100644 6071 `
- #
- # Janet channel table
- # The domain name on the LHS is routed to the "host" on the RHS.
- # Note that the domain names on the LHS are in big-endian form.
- #
- # Inclusion of this file automatically includes the following default rule:
- # uk.ac.<name> -> <name>
- # uk.co.<name> -> <name>
- #
- # So, only mappings of, say, sitenames to actual hosts is really necessary
- # (and then only if the mapping is not provided in the NRS directory)
- # e.g. uk.ac.york york.minster
- #
- # The rest is `optional'.
- #
- uk.ac.desy.dy.ga desy.dy.ga
- uk.ac.desy.dy.vb desy.dy.vb
- uk.ac.abdn abdn
- uk.ac.aber.v aber.v
- uk.ac.aston.vaxa aston.vaxa
- uk.ac.aston.vaxb aston.vaxb
- uk.ac.aucc aucc
- uk.ac.bedford bedford
- uk.ac.bbk.cs bbk.cs
- uk.ac.bbk.cu bbk.cu
- uk.ac.bham.phva bham.phva
- uk.ac.brad.cdc brad.cdc
- uk.ac.brad.comp brad.comp
- uk.ac.brad.eeng brad.eeng
- uk.ac.bris.csa bris.csa
- uk.ac.bris.esa bris.esa
- uk.ac.bris.gsa bris.gsa
- uk.ac.bris.msa bris.msa
- uk.ac.bris.pva bris.pva
- uk.ac.bris.qga bris.qga
- uk.ac.bris.qva bris.qva
- uk.ac.bris.qvb bris.qvb
- uk.ac.bris.qvc bris.qvc
- uk.ac.cam.cl cam.cl
- uk.ac.cam.cl-alvey cam.cl-alvey
- uk.ac.cam.cl-jenny cam.cl-jenny
- uk.ac.cam.cl-ring cam.cl-ring
- uk.ac.cam.cl-steve cam.cl-steve
- uk.ac.cam.cltripos cam.cltripos
- uk.ac.cam.eng-dsl cam.eng-dsl
- uk.ac.cam.eng-icf cam.eng-icf
- uk.ac.cam.eng-44 cam.eng-44
- uk.ac.cam.jenny cam.jenny
- uk.ac.cam.phx cam.phx
- uk.ac.cran.cdga cran.cdga
- uk.ac.cran.cdvb cran.cdvb
- uk.ac.cran.cdva cran.cdva
- uk.ac.dund dund
- uk.ac.dund.duns dund.duns
- uk.ac.uea.cpc.vax uea.cpc.vax
- uk.ac.uea.csa.vax uea.csa.vax
- uk.ac.uea.proteus uea.proteus
- uk.ac.uea.sp uea.sp
- uk.ac.ed ed
- uk.ac.ed.aigr aigr
- uk.ac.ed.aiva aiva
- uk.ac.ed.bush bush
- uk.ac.ed.cstvax cstvax
- uk.ac.ed.ecsvax ecsvax
- uk.ac.ed.edai edai
- uk.ac.ed.edee edee
- uk.ac.ed.edgr edgr
- uk.ac.ed.edmrc edmrc
- uk.ac.ed.edxa edxa
- uk.ac.ed.emas emas
- uk.ac.ed.epistemi epistemi
- uk.ac.ed.ercvax ercvax
- uk.ac.ed.eusip eusip
- uk.ac.ed.geovax geovax
- uk.ac.ed.mcsu mcsu
- uk.ac.ed.mrcvax mrcvax
- uk.ac.ed.phyvax phyvax
- uk.ac.ex.da ex.da
- uk.ac.hull.cs.perq hull.cs.perq
- uk.ac.janet.news janet.news
- uk.ac.janet.nmu janet.nmu
- uk.ac.lancs.vax1 lancs.vax1
- uk.ac.lancs.comp lancs.comp
- uk.ac.lancs.eng lancs.eng
- uk.ac.le.sabre le.sabre
- uk.ac.le.star le.star
- uk.ac.lon.arch.cu lon.arch.cu
- uk.ac.lon.educ.cu lon.educ.cu
- uk.ac.lon.neur.cu lon.neur.cu
- uk.ac.lon.pharm.cu lon.pharm.cu
- uk.ac.lon.rvc.cu lon.rvc.cu
- uk.ac.lut.multics lut.multics
- uk.ac.lse.vax1 lse.vax1
- uk.ac.lse.vax2 lse.vax2
- uk.ac.man.cgu man.cgu
- uk.ac.man.psy man.psy
- uk.ac.nott.vaxa nott.vaxa
- uk.ac.nott.icf nott.icf
- uk.ac.nott.hcig nott.hcig
- uk.ac.ox.prg ox.prg
- uk.ac.ox.prgg ox.prgg
- uk.ac.ox.prgv ox.prgv
- uk.ac.ox.vax1 ox.vax1
- uk.ac.ox.vax2 ox.vax2
- uk.ac.ox.vax3 ox.vax3
- uk.ac.plym.a plym.a
- uk.ac.plym.b plym.b
- uk.ac.plym.d plym.d
- uk.ac.qec.cu qec.cu
- uk.ac.qmc qmc
- uk.ac.qmc.cs qmc.cs
- uk.ac.rdg.am.cms rdg.am.cms
- uk.ac.rdg.am.uts rdg.am.uts
- uk.ac.rdg.cs rdg.cs
- uk.ac.rdg.micro rdg.micro
- uk.ac.rdg.psych rdg.psych
- uk.ac.rhc.vax rhc.vax
- uk.ac.rl.gb rl.gb
- uk.ac.rl.gd rl.gd
- uk.ac.rl.ge rl.ge
- uk.ac.rl.gf rl.gf
- uk.ac.rl.gk rl.gk
- uk.ac.rl.gm rl.gm
- uk.ac.rl.gr rl.gr
- uk.ac.rl.ib rl.ib
- uk.ac.rl.ic rl.ic
- uk.ac.rl.id rl.id
- uk.ac.rl.qb rl.qb
- uk.ac.rl.pa rl.pa
- uk.ac.rl.pb rl.pb
- uk.ac.rl.pc rl.pc
- uk.ac.rl.pd rl.pd
- uk.ac.rl.pe rl.pe
- uk.ac.rl.pf rl.pf
- uk.ac.rl.pg rl.pg
- uk.ac.rl.ph rl.ph
- uk.ac.rl.va rl.va
- uk.ac.rl.vb rl.vb
- uk.ac.rl.vc rl.vc
- uk.ac.rl.vd rl.vd
- uk.ac.rl.ve rl.ve
- uk.ac.rl.vf rl.vf
- uk.ac.rl.vg rl.vg
- uk.ac.rl.vi rl.vi
- uk.ac.rl.vs rl.vs
- uk.ac.salf.r-d salf.r-d
- uk.ac.salf.r-d-32 salf.r-d-32
- uk.ac.co.ga co.ga
- uk.ac.soton.elprq1 soton.elprq1
- uk.ac.st-and st-and
- uk.ac.stir.cs stir.cs
- uk.ac.stir.vaxa stir.vaxa
- uk.ac.stir.vaxb stir.vaxb
- uk.ac.swan.cv swan.cv
- uk.ac.swan.cs swan.cs
- uk.ac.ucl.brtl ucl.brtl
- uk.ac.ucl.cs ucl.cs
- uk.ac.ucl.tsperq ucl.tsperq
- uk.ac.ukc ukc
- uk.ac.uwist.vaxa uwist.vaxa
- uk.ac.uwist.vaxb uwist.vaxb
- uk.ac.uwist.vaxc uwist.vaxc
- uk.ac.uwist.vaxd uwist.vaxd
- uk.ac.uwist.vaxdev uwist.vaxdev
- uk.ac.warwk.daisy warwk.daisy
- uk.ac.warwk.ga warwk.ga
- uk.ac.warwk.pa warwk.pa
- uk.ac.warwk.ubu warwk.ubu
- uk.ac.york york.minster
- uk.ac.york.abbot york.abbot
- uk.ac.york.canon york.canon
- uk.ac.york.deacon york.deacon
- uk.ac.york.minster york.minster
- uk.ac.york.novice york.novice
-
- bitnet.chn 483094477 217 10 100644 402 `
- #
- # Bitnet channel table
- # Actual routing is done by the bitnet mailer itself.
- # Existance of this file automatically includes the following mappings:
- # <any>.bitnet -> <any>
- # <any>.arpa -> smtpuser@wiscvm (see bitnetm.m4)
- # <any>.uucp -> uucp@psuvax1 (see bitnetm.m4)
- #
- # So, only bitnet sites with other domain names should be included here
- # e.g. ucbjade.cc ucbjade
- #
- top.chn 483094477 217 10 100644 331 `
- # Top level domains
- # if address hasn't matched a domain name in any other table then
- # it should match something here. The RHS is a domain which specifies
- # where the message should be relayed for further routing.
- #
- uk cs.ucl.ac.uk
- uucp ukc.ac.uk
- arpa ukc.ac.uk
- csnet csnet-relay.arpa
- bitnet wiscvm.arpa
- dec decwrl.arpa
-
- SHAR_EOF
- if test 8558 -ne "`wc -c Examples.a`"
- then
- echo shar: error transmitting Examples.a '(should have been 8558 characters)'
- fi
- echo shar: done with directory chn
- chdir ..
- # End of shell archive
- exit 0
-
-